使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移) | 您所在的位置:网站首页 › mongodb 多线程 › 使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移) |
本篇文章为你整理了使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移)的详细内容,包含有多线程拷贝文件 多线程实现数据批量迁移 多线程导入数据 多线程 批量 插数据 到数据库 使用多线程及线程池批量拷贝数据到MongoDB,希望能帮助你了解 使用多线程及线程池批量拷贝数据到MongoDB。 @ 目录前言一、原来代码二、改进后代码1.使用new Thread方式2.使用Runnable接口3.使用线程池 提示:本文仅供学习交流,请勿用于非法活动! 本文大概内容: 例如:随着MongoDB的广泛应用,电商用到MongoDB也越来越多。本文主要是在将购物车模块切换到MongoDB框架前,如何快速将Mysql中购物车大批量订单拷贝到MongoDB数据库中? 一、原来代码 如下,我们将拷贝100万条数据到MongoDB中。 public void copyCartToMongo() {
List Cart carts = cartMapper.selectAll(); if(carts.size() 0 ){ cartMongoService.saveCartList(carts);
二、改进后代码 public void copyCartToMongoByThread() {
// 1.我们先将批量查询及拷贝的数据分批 EntityWrapper Cart wrapper = SQLHelper.buildEmptyWrapper(Cart.class); long count = cartMapper.selectCount(SQLHelper.build(Cart.class).geEntityWrapper()); int preCount = 100; int operateCount = 0; int num = operateCount = (int)count / preCount; if(count % preCount == 0){ operateCount = num; }else { operateCount = num + 1; for(int i=0;i operateCount;i++){ logger.info("保存或更新第"+(i+1)*preCount+"条数据"); Page Cart page = new Page (i,preCount); List Cart cartList = cartMapper.selectPage(page, wrapper); // 2.通过多线程、线程池(其他替换即可) this.copyCartToMongoThread(cartList);
上述代码中有以下三种方式实现: 1.使用new Thread方式 代码如下: public void copyCartToMongoThread(List Cart cartList){
final CountDownLatch latch = new CountDownLatch(cartList.size()); try{ for(Cart cart:cartList){ Thread thread = new Thread(() - { cartMongoService.saveCart(cart); latch.countDown(); thread.start(); latch.await(); } catch (Exception e) { e.printStackTrace();
2.使用Runnable接口 代码如下: public void copyCartToMongoThread(List Cart cartList){
final CountDownLatch latch = new CountDownLatch(cartList.size()); try { for (Cart cart:cartList){ new Thread(new Runnable() { @Override public void run() { cartMongoService.saveCart(cart); latch.countDown(); }).start(); latch.await(); } catch (InterruptedException e) { e.printStackTrace();
3.使用线程池 代码如下:
public void copyCartToMongoThreadPool(List Cart cartList){ final CountDownLatch latch = new CountDownLatch(cartList.size()); // 配置线程池个数 ExecutorService executorService = Executors.newFixedThreadPool(1); try{ for(Cart cart:cartList){ executorService.submit(new Runnable() { @Override public void run() { try{ cartMongoService.saveCart(cart); // 一直阻塞当前线程,直到计数器值为0,保证并发 latch.await(); } catch (Exception e) { e.printStackTrace(); latch.countDown(); } catch (Exception e) { e.printStackTrace();
随心所往,看见未来。Follow your heart,see night! 欢迎点赞、关注、留言,一起学习、交流! 以上就是使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移)的详细内容,想要了解更多 使用多线程及线程池批量拷贝数据到MongoDB的内容,请持续关注盛行IT软件开发工作室。 郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系QQ332078507,我们将第一时间修改或删除,多谢。 |
CopyRight 2018-2019 实验室设备网 版权所有 |